package co.com.tye.presentation.backingBeans;

import co.com.tye.exceptions.*;
import co.com.tye.modelo.*;
import co.com.tye.modelo.dto.EstudianteDTO;
import co.com.tye.presentation.businessDelegate.*;
import co.com.tye.utilities.*;

import org.primefaces.component.calendar.*;
import org.primefaces.component.commandbutton.CommandButton;
import org.primefaces.component.inputtext.InputText;

import org.primefaces.event.RowEditEvent;

import java.io.Serializable;

import java.sql.*;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;


/**
 * @author Zathura Code Generator http://code.google.com/p/zathura/
 * www.zathuracode.org
 *
 */
@ManagedBean
@ViewScoped
public class EstudianteView implements Serializable {
    private static final long serialVersionUID = 1L;
    private InputText txtApeliidos;
    private InputText txtCodigoEstudiante;

    private InputText txtMail;
    private InputText txtNombres;
    private InputText txtSemestre;

    private InputText txtIdestudiante;

    private CommandButton btnSave;
    private CommandButton btnModify;
    private CommandButton btnDelete;
    private CommandButton btnClear;
    private List<EstudianteDTO> data;
    private EstudianteDTO selectedEstudiante;
    private Estudiante entity;
    private boolean showDialog;
    @ManagedProperty(value = "#{BusinessDelegatorView}")
    private IBusinessDelegatorView businessDelegatorView;

    public EstudianteView() {
        super();
    }

    public void rowEventListener(RowEditEvent e) {
        try {
            EstudianteDTO estudianteDTO = (EstudianteDTO) e.getObject();

            if (txtApeliidos == null) {
                txtApeliidos = new InputText();
            }

            txtApeliidos.setValue(estudianteDTO.getApeliidos());

            if (txtCodigoEstudiante == null) {
                txtCodigoEstudiante = new InputText();
            }

            txtCodigoEstudiante.setValue(estudianteDTO.getCodigoEstudiante());

            if (txtMail == null) {
                txtMail = new InputText();
            }

            txtMail.setValue(estudianteDTO.getMail());

            if (txtNombres == null) {
                txtNombres = new InputText();
            }

            txtNombres.setValue(estudianteDTO.getNombres());

            if (txtSemestre == null) {
                txtSemestre = new InputText();
            }

            txtSemestre.setValue(estudianteDTO.getSemestre());

            if (txtIdestudiante == null) {
                txtIdestudiante = new InputText();
            }

            txtIdestudiante.setValue(estudianteDTO.getIdestudiante());


            Integer idestudiante = FacesUtils.checkInteger(txtIdestudiante);
            entity = businessDelegatorView.getEstudiante(idestudiante);

            action_modify();
        } catch (Exception ex) {
        }
    }

    public String action_new() {
        action_clear();
        selectedEstudiante = null;
        setShowDialog(true);

        return "";
    }

    public String action_clear() {
        entity = null;
        selectedEstudiante = null;

        if (txtApeliidos != null) {
            txtApeliidos.setValue(null);
            txtApeliidos.setDisabled(false);
        }

        if (txtCodigoEstudiante != null) {
            txtCodigoEstudiante.setValue(null);
            txtCodigoEstudiante.setDisabled(false);
        }

        if (txtMail != null) {
            txtMail.setValue(null);
            txtMail.setDisabled(false);
        }

        if (txtNombres != null) {
            txtNombres.setValue(null);
            txtNombres.setDisabled(false);
        }

        if (txtSemestre != null) {
            txtSemestre.setValue(null);
            txtSemestre.setDisabled(false);
        }

        if (btnSave != null) {
            btnSave.setDisabled(false);
        }

        if (btnDelete != null) {
            btnDelete.setDisabled(false);
        }

        return "";
    }

    public String action_edit(ActionEvent evt) {
        selectedEstudiante = (EstudianteDTO) (evt.getComponent().getAttributes()
                                                 .get("selectedEstudiante"));
        txtApeliidos.setValue(selectedEstudiante.getApeliidos());
        txtApeliidos.setDisabled(false);
        txtCodigoEstudiante.setValue(selectedEstudiante.getCodigoEstudiante());
        txtCodigoEstudiante.setDisabled(false);
        txtMail.setValue(selectedEstudiante.getMail());
        txtMail.setDisabled(false);
        txtNombres.setValue(selectedEstudiante.getNombres());
        txtNombres.setDisabled(false);
        txtSemestre.setValue(selectedEstudiante.getSemestre());
        txtSemestre.setDisabled(false);

        btnSave.setDisabled(false);
        setShowDialog(true);

        return "";
    }

    public String action_save() {
        try {
            if ((selectedEstudiante == null) && (entity == null)) {
                action_create();
            } else {
                action_modify();
            }

            data = null;
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_create() {
        try {
            entity = new Estudiante();

            entity.setApeliidos(FacesUtils.checkString(txtApeliidos));
            entity.setCodigoEstudiante(FacesUtils.checkString(
                    txtCodigoEstudiante));
            entity.setEstadoRegistro("activo");
            entity.setFechaCreacion(new Date());
            entity.setIdestudiante(0);
            entity.setMail(FacesUtils.checkString(txtMail));
            entity.setNombres(FacesUtils.checkString(txtNombres));
            entity.setSemestre(FacesUtils.checkString(txtSemestre));
            businessDelegatorView.saveEstudiante(entity);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
            action_clear();
        } catch (Exception e) {
            entity = null;
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modify() {
        try {
            if (entity == null) {
                Integer idestudiante = new Integer(selectedEstudiante.getIdestudiante());
                entity = businessDelegatorView.getEstudiante(idestudiante);
            }

            entity.setApeliidos(FacesUtils.checkString(txtApeliidos));
            entity.setCodigoEstudiante(FacesUtils.checkString(txtCodigoEstudiante));
            entity.setFechaUltimaModificacion(new Date());
            entity.setMail(FacesUtils.checkString(txtMail));
            entity.setNombres(FacesUtils.checkString(txtNombres));
            entity.setSemestre(FacesUtils.checkString(txtSemestre));
           
            businessDelegatorView.updateEstudiante(entity);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            data = null;
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_delete_datatable(ActionEvent evt) {
        try {
            selectedEstudiante = (EstudianteDTO) (evt.getComponent()
                                                     .getAttributes()
                                                     .get("selectedEstudiante"));

            Integer idestudiante = new Integer(selectedEstudiante.getIdestudiante());
            entity = businessDelegatorView.getEstudiante(idestudiante);
            action_delete();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_delete_master() {
        try {
            Integer idestudiante = FacesUtils.checkInteger(txtIdestudiante);
            entity = businessDelegatorView.getEstudiante(idestudiante);
            action_delete();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public void action_delete() throws Exception {
        try {
            businessDelegatorView.deleteEstudiante(entity);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
            data = null;
        } catch (Exception e) {
            throw e;
        }
    }

    public String action_closeDialog() {
        setShowDialog(false);
        action_clear();

        return "";
    }

    public String actionDeleteDataTableEditable(ActionEvent evt) {
        try {
            selectedEstudiante = (EstudianteDTO) (evt.getComponent()
                                                     .getAttributes()
                                                     .get("selectedEstudiante"));

            Integer idestudiante = new Integer(selectedEstudiante.getIdestudiante());
            entity = businessDelegatorView.getEstudiante(idestudiante);
            businessDelegatorView.deleteEstudiante(entity);
            data.remove(selectedEstudiante);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
            action_clear();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        return "";
    }

    public String action_modifyWitDTO(String apeliidos,
        String codigoEstudiante, String estadoRegistro, Date fechaCreacion,
        Date fechaUltimaModificacion, Integer idestudiante, String mail,
        String nombres, String semestre, String usuarioCreado)
        throws Exception {
        try {
            entity.setApeliidos(FacesUtils.checkString(apeliidos));
            entity.setCodigoEstudiante(FacesUtils.checkString(codigoEstudiante));
            entity.setEstadoRegistro(FacesUtils.checkString(estadoRegistro));
            entity.setFechaCreacion(FacesUtils.checkDate(fechaCreacion));
            entity.setFechaUltimaModificacion(FacesUtils.checkDate(
                    fechaUltimaModificacion));
            entity.setMail(FacesUtils.checkString(mail));
            entity.setNombres(FacesUtils.checkString(nombres));
            entity.setSemestre(FacesUtils.checkString(semestre));
            entity.setUsuarioCreado(FacesUtils.checkString(usuarioCreado));
            businessDelegatorView.updateEstudiante(entity);
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("EstudianteView").requestRender();
            FacesUtils.addErrorMessage(e.getMessage());
            throw e;
        }

        return "";
    }

    public InputText getTxtApeliidos() {
        return txtApeliidos;
    }

    public void setTxtApeliidos(InputText txtApeliidos) {
        this.txtApeliidos = txtApeliidos;
    }

    public InputText getTxtCodigoEstudiante() {
        return txtCodigoEstudiante;
    }

    public void setTxtCodigoEstudiante(InputText txtCodigoEstudiante) {
        this.txtCodigoEstudiante = txtCodigoEstudiante;
    }

    public InputText getTxtMail() {
        return txtMail;
    }

    public void setTxtMail(InputText txtMail) {
        this.txtMail = txtMail;
    }

    public InputText getTxtNombres() {
        return txtNombres;
    }

    public void setTxtNombres(InputText txtNombres) {
        this.txtNombres = txtNombres;
    }

    public InputText getTxtSemestre() {
        return txtSemestre;
    }

    public void setTxtSemestre(InputText txtSemestre) {
        this.txtSemestre = txtSemestre;
    }

    public InputText getTxtIdestudiante() {
        return txtIdestudiante;
    }

    public void setTxtIdestudiante(InputText txtIdestudiante) {
        this.txtIdestudiante = txtIdestudiante;
    }

    public List<EstudianteDTO> getData() {
        try {
            if (data == null) {
                data = businessDelegatorView.getDataEstudiante();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return data;
    }

    public void setData(List<EstudianteDTO> estudianteDTO) {
        this.data = estudianteDTO;
    }

    public EstudianteDTO getSelectedEstudiante() {
        return selectedEstudiante;
    }

    public void setSelectedEstudiante(EstudianteDTO estudiante) {
        this.selectedEstudiante = estudiante;
    }

    public CommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(CommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public CommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(CommandButton btnModify) {
        this.btnModify = btnModify;
    }

    public CommandButton getBtnDelete() {
        return btnDelete;
    }

    public void setBtnDelete(CommandButton btnDelete) {
        this.btnDelete = btnDelete;
    }

    public CommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(CommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }

    public IBusinessDelegatorView getBusinessDelegatorView() {
        return businessDelegatorView;
    }

    public void setBusinessDelegatorView(
        IBusinessDelegatorView businessDelegatorView) {
        this.businessDelegatorView = businessDelegatorView;
    }

    public boolean isShowDialog() {
        return showDialog;
    }

    public void setShowDialog(boolean showDialog) {
        this.showDialog = showDialog;
    }
}
